const Controller = require("egg").Controller;

class HomeController extends Controller {
    /**
     * 应用首页
     */
    async index() {
        // 解构 this 获取 ctx 对象
        const { ctx } = this;
        // 响应请求
        ctx.body = "Hi, egg ~";
    }

    /**
     * 注册
     */
    async register() {
        // 解构 this 获取 ctx 对象
        const { ctx } = this;
        // 解构参数
        const { username, password, nickname } = ctx.request.body;
        // 必填字段，非空校验
        if (!username || !password || !nickname) {
            ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
            return;
        }
        // 用户名不能重复
        const user = await this.service.user.findByUsername(username);
        // 如果存在，不能注册
        if (user) {
            ctx.body = {
                code: 403,
                message: "用户名已存在，不允许重复注册",
            };
            return;
        }
        // 将用户添加到数据库
        const res = await this.service.user.addUser(
            username,
            this.ctx.helper.passwordEncoder(password),
            nickname
        );
        // 判断是否注册成功
        if (res.affectedRows !== 1) {
            ctx.body = {
                code: 500,
                message: "注册失败",
            };
            return;
        }
        // 注册成功
        ctx.body = {
            code: 201,
            message: "注册成功",
        };
    }

    /**
     * 登录
     */
    async login() {
        // 解析请求参数
        const { username, password } = this.ctx.request.body;
        // 非空校验
        if (!username || !password) {
            this.ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
            return;
        }
        // 先看系统存不存在这个用户
        const user = await this.service.user.findByUsername(username);
        // 如果不存在，提示不存在该用户
        if (!user) {
            this.ctx.body = {
                code: 404,
                message: "用户不存在",
            };
            return;
        }
        console.log(
            "this.ctx.helper.passwordEncoder(password) ",
            this.ctx.helper.passwordEncoder(password)
        );
        // 校验密码是否一致
        if (this.ctx.helper.passwordEncoder(password) !== user.password) {
            this.ctx.body = {
                code: 400,
                message: "密码不正确",
            };
            return;
        }
        // 去除敏感字段
        delete user.password;
        // 验证了用户身份，可以登录，给他的身份生成一个标识，以后拿着这个标识，服务器就知道你是谁了
        const token = this.ctx.helper.genToken({ ...user });
        // 返回这个标识即可
        this.ctx.body = {
            code: 200,
            data: {
                token,
                user,
            },
            message: "登录成功",
        };
    }
}

module.exports = HomeController;
